iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0

前言

終於,我們有關 xml 語法相關檔案的介紹來到最後一篇了!!!想當初筆者也是花了很多時間,一點一滴的收集資料後,才能夠勉強操作檔案內容,還常常會被不知名的 bug 弄得頭昏腦脹,接下來就看看今天所要介紹的 world 檔的功用,還有如何操作吧!

world檔

一樣從問問題開始吧,什麼是 world 檔 ?

world 是針對 gazebo,所寫出來的 xml 格式檔案,目的就是透過建立相關參數,設定所需要的模擬環境來模擬機器人所要應對的實際情況。那創建一個自己的世界難嗎 ? 別擔心,應該只會比 minecraft 這個遊戲難一點吧。下面是一個 world 檔的程式碼,大家可以試著用已經學過 xml 概念去解讀一下。

<sdf version='1.4'>
  <world name='default'>
    <!-- A global light source -->
    <include>
     <uri>model://sun</uri>
    </include>
    <!-- A ground plane -->
    <include>
     <uri>model://ground_plane</uri>
    </include>
    <physics type="ode">
     <real_time_update_rate>1000.0</real_time_update_rate>
     <max_step_size>0.001</max_step_size>
     <real_time_factor>1</real_time_factor>
     <ode>
      <solver>
       <type>quick</type>
       <iters>150</iters>
       <precon_iters>0</precon_iters>
       <sor>1.400000</sor>
       <use_dynamic_moi_rescaling>1</use_dynamic_moi_rescaling>
    </solver>
   <constraints>
    <cfm>0.00001</cfm>
    <erp>0.2</erp>
    <contact_max_correcting_vel>2000.000000
    </contact_max_correcting_vel>
    <contact_surface_layer>0.01000</contact_surface_layer>
   </constraints>
     </ode>
    </physics>
    <!-- Load world -->
      <include>
       <uri>model://turtlebot3_world</uri>
      </include>
      <scene>
       <ambient>0.4 0.4 0.4 1</ambient>
       <background>0.7 0.7 0.7 1</background>
       <shadows>true</ shadows>
      </scene>
    <gui fullscreen='0'>
     <camera name='user camera'>
       <pose>0.8 0.0 12.0 0 1.5708 0</pose>
       <view_controllervorbit</view_controller>
     </camera>
    </world>
</sdf>

不太理解的讀者也沒關係,接下來我們稍微講一下比較重要的標籤的意義,至於其他部分為什麼不多做解釋呢?是因為以下幾個是較基本、重要的標籤,有興趣的讀者也可以到下面提供連結看看其他更多的標籤意義。
例:

<sdf version='1.4'>
<world name='default'>
<!-- A global light source -->
<include>
<uri>model://sun</uri>
</include>

首先
<!-- A global light source --> 這表示註解,幫助你知道以下的資料對應的是哪個部分。再來看到 <sdf> ,這裡可以看到它是用來宣布這個 world 檔它所使用的語言版本是第幾代,因為有些標籤在較前面的版本是不存在的,所以要特別注意。

接著 <include>這個標籤就是用於導入別的檔案,如同我們上個章節所講的。但我們要看到的是 <uri> 裡面所導入的一個 model 模型模型 sun ,就像標籤所講的這就是在加入一顆太陽在你的世界之中,其他的世界物件也可以以此類推。

然後我們看到 <physics> ,它的作用就是在設定你世界的 物理參數,諸如時間、重力等等,其項目繁多就不一個一個說明了,有關更多標籤和設定可以參考這個網站

物理設定:

<physics type="ode">
 <real_time_update_rate>1000.0</real_time_update_rate>
 <max_step_size>0.001</max_step_size>
 <real_time_factor>1</real_time_factor>
 <ode>
  <solver>
    <type>quick</type>
    <iters>150</iters>
    <precon_iters>0</precon_iters>
    <sor>1.400000</sor>
    <use_dynamic_moi_rescaling>1</use_dynamic_moi_rescaling>
  </solver>
  <constraints>
   <cfm>0.00001</cfm>
   <erp>0.2</erp>
   <contact_max_correcting_vel>2000.000000
   </contact_max_correcting_vel>
   <contact_surface_layer>0.01000</contact_surface_layer>
  </constraints>
 </ode>
</physics>

對於一個基本的 emptyworld 的內容就介紹到這邊就好,由於官網已經有設定好的空白世界檔所以不必太擔心要從頭來。

那當你設定好 world 後,使用 <launch> 將他包圍,還有前面一直提到 <include> 導入檔案的方法,變成一個 empty_world.launch 檔後,就可以如下圖一般把它導入你主要使用的 launch,就能一鍵開啟啦!

例:(加入機器人還有 world 設定的綜合 launch)

<launch>
 <arg name="model" default="waffle" doc="model type [burger, waffle, waffle_pi]"/>
 <arg name="x_pos" default-"0.0"/>
 <arg name="y_pos" default="0.0"/>
 <arg name="z_pos" default="0.0"/>
 <!--導入空白世界的launch-->
 <include file="$(find gazebo_ros)/launch/empty_world. launch">
 <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds /empty.world"/>
 <arg name="paused" value="false"/>
 <arg name="use_sim_time" value="true"/>
 <arg name="gui" value="true"/>
 <arg name="headless" value="false"I>
 <arg name="debug" value="false"/>
 </include>
 <!--導入結束-->
 <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg
model) .urdf.xacro"
 <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos)-y $(arg y_pos)
-z $(arg z_pos)-param robot_description" />
</launch>

大家還能看到 <arg name=” model” default……/>,還有底下的 <arg name xyz_pos>,這兩個標籤其實是在設定你模型的種類,還有在世界上的座標位置。

接著看到 <include> 下,也有許多 <arg name=….>,這裡就是在對你當初寫好的的 world 檔中標籤參數做修改,value="ture" 就是開啟標籤內容,反之亦然。

結語

很快的連假已經進入尾聲,所幸這幾天的鐵人賽也都很順利的完成,還以為會因為連假怠惰而不小心失敗。筆者也很佩服其他同樣參加鐵人賽的前輩,有著能夠堅持下去的精神。那經過前面的基本介紹後,我們已經具備進入實際模擬,組合自己自走車的能力了,明後天我們就會開始介紹如何安裝還有使用 gazebo 跟 rviz 以及裡面的基礎操作,請大家敬請期待!!
https://ithelp.ithome.com.tw/upload/images/20201003/20129807zWdyQPDjzm.png


上一篇
[DAY 17] ROS Launch 的介紹與應用2
下一篇
[DAY 19] Gazebo && Rviz 簡介
系列文
ROS系統控制自走車搭配點雲雷達(隧道檢測裝置)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言